package com.itheima.controller;


import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.entity.Result;
import com.itheima.pojo.OrderSetting;
import com.itheima.service.OrderSettingService;
import com.itheima.utils.POIUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/ordersetting")
public class OrderSettingController {

    @Reference
    private OrderSettingService orderSettingService;


    //预约设置
    @RequestMapping("/setDateByNumber.do")
    public Result setDateByNumber(@RequestBody OrderSetting orderSetting) {
        orderSettingService.setDateByNumber(orderSetting);
        return Result.success("");
    }

    //模板下载
    @RequestMapping("/upload")
    public Result upload(MultipartFile excelFile) {

        try {
            //读取文件
            List<String[]> dataArray = POIUtils.readExcel(excelFile);

            //判断 读取的文件是否为空
            if (CollectionUtil.isNotEmpty(dataArray)) {
                //创建一个数组    把数据放进数组   批量传输
                List<OrderSetting> orderSettings = new ArrayList<>();

                //遍历循环 读取的 表
                for (String[] row : dataArray) {
                    /*判断 因为要满足两个参数都存在*/
                    if (row.length !=2){
                        continue;
                    }
                    // 获取每行第一个位置 的值
                    String dateStr = row[0];
                    // 获取每行第二个位置 的值
                    String numberStr = row[1];
                    //因为 读取表 读出来是字符串类型   而 orderSetting  是日期类型  和  int 类型  要转化
                    DateTime orderDate = DateUtil.parse(dateStr, "yyyy/MM/dd");
                    Integer number = Integer.valueOf(numberStr);
                    // 创建orderSetting对象 把参数传递进去
                    OrderSetting orderSetting = new OrderSetting(orderDate, number);
                    //     把对象数据 添加到数组里
                    orderSettings.add(orderSetting);
                }
                orderSettingService.addBatch(orderSettings);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Result.success("");
    }

    //数据回显 日期  可预约人数
    @RequestMapping("/queryByDate.do")
    public Result queryByDate(String date){
        //因为一个月多个日期   用List<Map>  来保存并查询返回个页面
            //{"date":22,"mouth":1,"number":300,"reservations":300,},
        List<Map> maps = orderSettingService.queryByDate(date);
        return Result.success("",maps);
    }

}

